﻿using Abp.Domain.Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AVIS.OutBound.AWD
{
    /// <summary>
    /// Avis全球折扣号，全称为：Avis Worldwide Discount
    /// </summary>
    [Table("avisOBAWD")]
    public class AWDNumber : Entity
    {
        /// <summary>
        /// AWD的编号（Wizard）
        /// </summary>
        public string Code { get; set; }

        /// <summary>
        /// 国内可识别的AWD（需要转换为Wizard的AWD才可以使用）
        /// </summary>
        public string CNAWD { get; set; }

        /// <summary>
        /// 验证码，验证规则可以看备注信息，如：请您输入工行环球卡卡号前六位
        /// </summary>
        public string AWDPassword { get; set; }

        /// <summary>
        /// 备注说明（作为用户的提醒文本，如：请输入交通银行信用卡前6位）
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// FTP常旅客，表示该AWD必须用对应的FTP常旅客号
        /// </summary>
        public string FTP { get; set; }

        /// <summary>
        /// FTP常旅客的备注（用于提醒用户）
        /// </summary>
        public string FTPRemark { get; set; }

        /// <summary>
        /// 当 AWDPassword = SUPERCODE 时，需要比对的Code
        /// </summary>
        public string[] BinCodes { get; set; }

        #region 公共方法
        /// <summary>
        /// 校验验证码
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public bool CheckAWDPassword(string password)
        {
            if (string.IsNullOrWhiteSpace(password)
                || string.IsNullOrWhiteSpace(this.AWDPassword))
            {
                return false;
            }

            // 判断是否为 SUPERCODE
            if (this.AWDPassword.Equals("SUPERCODE", StringComparison.OrdinalIgnoreCase))
            {
                if (BinCodes.Contains(password, StringComparer.OrdinalIgnoreCase))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

            // 判断是否为正确密码（AWDPassword可能包含多个正确密码，多个用"^"隔开）
            var strPassList = AWDPassword.Split(OutBoundConsts.SysSeparator.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            if (strPassList.Contains(password, StringComparer.OrdinalIgnoreCase))
            {
                return true;
            }

            return false;
        }

        /// <summary>
        /// 是否需要校验密码
        /// </summary>
        /// <returns></returns>
        public bool NeedCheckAWD()
        {
            return !string.IsNullOrWhiteSpace(this.AWDPassword);
        }
        #endregion
    }
}
